home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.31-14 / scripts / checkkconfigsymbols.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  2009-09-09  |  2KB  |  60 lines

  1. #!/bin/sh
  2. # Find Kconfig variables used in source code but never defined in Kconfig
  3. # Copyright (C) 2007, Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
  4.  
  5. # Tested with dash.
  6. paths="$@"
  7. [ -z "$paths" ] && paths=.
  8.  
  9. # Doing this once at the beginning saves a lot of time, on a cache-hot tree.
  10. Kconfigs="`find . -name 'Kconfig' -o -name 'Kconfig*[^~]'`"
  11.  
  12. echo -e "File list \tundefined symbol used"
  13. find $paths -name '*.[chS]' -o -name 'Makefile' -o -name 'Makefile*[^~]'| while read i
  14. do
  15.     # Output the bare Kconfig variable and the filename; the _MODULE part at
  16.     # the end is not removed here (would need perl an not-hungry regexp for that).
  17.     sed -ne 's!^.*\<\(UML_\)\?CONFIG_\([0-9A-Z_]\+\).*!\2 '$i'!p' < $i
  18. done | \
  19. # Smart "sort|uniq" implemented in awk and tuned to collect the names of all
  20. # files which use a given symbol
  21. awk '{map[$1, count[$1]++] = $2; }
  22. END {
  23.     for (combIdx in map) {
  24.         split(combIdx, separate, SUBSEP);
  25.         # The value may have been removed.
  26.         if (! ( (separate[1], separate[2]) in map ) )
  27.             continue;
  28.         symb=separate[1];
  29.         printf "%s ", symb;
  30.         #Use gawk extension to delete the names vector
  31.         delete names;
  32.         #Portably delete the names vector
  33.         #split("", names);
  34.         for (i=0; i < count[symb]; i++) {
  35.             names[map[symb, i]] = 1;
  36.             # Unfortunately, we may still encounter symb, i in the
  37.             # outside iteration.
  38.             delete map[symb, i];
  39.         }
  40.         i=0;
  41.         for (name in names) {
  42.             if (i > 0)
  43.                 printf ", %s", name;
  44.             else
  45.                 printf "%s", name;
  46.             i++;
  47.         }
  48.         printf "\n";
  49.     }
  50. }' |
  51. while read symb files; do
  52.     # Remove the _MODULE suffix when checking the variable name. This should
  53.     # be done only on tristate symbols, actually, but Kconfig parsing is
  54.     # beyond the purpose of this script.
  55.     symb_bare=`echo $symb | sed -e 's/_MODULE//'`
  56.     if ! grep -q "\<$symb_bare\>" $Kconfigs; then
  57.         echo -e "$files: \t$symb"
  58.     fi
  59. done|sort
  60.